<?php
/**
 * 熵巡 - 企业级氚云OpenAPI数据管理平台
 * 开发归属 Alyr.net
 * 保存配置接口 - 基础配置保存、备份API
 * 尊重劳动成果是一种美德
 */

header('Content-Type: application/json; charset=utf-8');

// 设置session目录权限
ini_set('session.save_path', sys_get_temp_dir());
// 检查登录状态
session_start();
if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) {
    http_response_code(401);
    echo json_encode(['success' => false, 'message' => '未登录']);
    exit;
}

try {
    // 获取POST数据
    $input = file_get_contents('php://input');
    $data = json_decode($input, true);
    
    if (!$data || !isset($data['config_content'])) {
        throw new Exception('缺少配置内容');
    }
    
    $configContent = $data['config_content'];
    
    // 验证配置内容格式
    if (!is_string($configContent) || strpos($configContent, '<?php') !== 0) {
        throw new Exception('配置内容格式不正确');
    }
    
    // 备份原配置文件
    $configFile = '../config.php';
    $backupFile = '../config.php.backup.' . date('Y-m-d_H-i-s');
    
    if (file_exists($configFile)) {
        if (!copy($configFile, $backupFile)) {
            throw new Exception('无法创建配置文件备份');
        }
    }
    
    // 写入新配置
    if (!file_put_contents($configFile, $configContent)) {
        throw new Exception('无法写入配置文件');
    }
    
    // 验证新配置文件是否有效
    $testConfig = include($configFile);
    if (!is_array($testConfig)) {
        // 如果新配置无效，恢复备份
        if (file_exists($backupFile)) {
            copy($backupFile, $configFile);
        }
        throw new Exception('新配置文件格式无效，已恢复原配置');
    }
    
    // 日志已禁用
    // $logDir = '../logs/config';
    // if (!is_dir($logDir)) {
    //     mkdir($logDir, 0755, true);
    // }
    // $logMessage = date('Y-m-d H:i:s') . " - 用户 {$_SESSION['username']} 更新了配置文件\n";
    // file_put_contents($logDir . '/config_changes.log', $logMessage, FILE_APPEND | LOCK_EX);
    
    echo json_encode([
        'success' => true,
        'message' => '配置保存成功',
        'backup_file' => basename($backupFile)
    ]);
    
} catch (Exception $e) {
    echo json_encode([
        'success' => false,
        'message' => $e->getMessage()
    ]);
}
?>